<?php

namespace jm\helper;

// 地图
class Map
{
    /**
     * 求两个已知经纬度之间的距离,单位为米
     * @param lng1 $ ,lng2 经度
     * @param lat1 $ ,lat2 纬度
     * @return 米（默认保留整数）
     */
    public static function getDistance($lng1, $lat1, $lng2, $lat2, $decimal=0) {
        // deg2rad()函数将角度转换为弧度
        $radLat1 = deg2rad($lat1);
        $radLat2 = deg2rad($lat2);
        return round(2 * asin(sqrt(pow(sin(($radLat1 - $radLat2) / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin((deg2rad($lng1) - deg2rad($lng2)) / 2), 2))) * 6378137, $decimal);
    }

    /**
     * 计算两点之间距离
     * @param slng 起始经度
     * @param slat 起始纬度
     * @param elng 结束经度
     * @param elat 结束纬度
     * @return 米（默认保留整数）
     */
    public static function getDistanceByGaoDe($slng, $slat, $elng, $elat, $decimal=0) {
        $lat1 = (M_PI / 180) * $slat;
        $lat2 = (M_PI / 180) * $elat;
        return round((acos( sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos((M_PI / 180) * $elng - (M_PI / 180) * $slng) ) * 6378137), $decimal);
    }
}

/*
$lng1 = 121.506996125;
$lng2 = 121.5338301659;
$lat1 = 31.030235808713;
$lat2 = 31.0118032334;
vr(getDistance($lng1, $lat1, $lng2, $lat2));
vr(getDistanceByGaoDe($lng1, $lat1, $lng2, $lat2));
两个方法的结果一样；即使参数调换位置，也总是得到正数的值，不会得到负数。
 */